<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /* let a = 1
      function fn(a) {
        // 局部变量：函数内容通过 var let const 定义的、形参
        // 简单数据类型传递的是值本身，是值的拷贝
        a = 2
      }
      fn(a)
      console.log(a) // 1 */

      /* let a = 1
      function fn() {
        a = 2
      }
      fn(a)
      console.log(a) // 2 */

      /* const a = [8]

      function fn(b) {
        // 复杂数据类型传递是引用地址的拷贝
        b.push(9)
      }
      fn(a)
      console.log(a) // [8, 9] */

      /* const a = [8]
      const b = a // 把 a 的引用地址给了 b，a 和 b 对应的是同一份内存空间 */

      /* const a = [8]
      function fn(a) {
        a = [9]
      }
      fn(a)
      console.log(a) // [8] */

      let a = [8]
      function fn() {
        a = [9]
      }
      fn(a)
      console.log(a) // [9]
      // 简单数据类型传递的是值的拷贝，函数内部的修改不会影响外部
      // 赋值数据类型传递是引用地址的拷贝，对这个引用地址内容的修改会影响外部（b.push(9)），引用本身的修改不会影响外部（b = [9]）
    </script>
  </body>
</html>
